<?php
/*
 * ==BeLean==
 * This file is part of the BeLean project!
 * 
 * BBS Brinkstrasse Osnabrück
 * @author	Marco Kreienbrink <marco.kreienbrink@googlemail.com>
 *  
 * 
 */  
	include_once "basic.class.php";
	
    class database extends basic{
        protected $connection;
        protected $query;
        protected $result;
        protected $numRows;
        protected $dbError;
	    protected $log = "../logs/error_log.log.php";        

        /**
         *  Konstruktor der Klasse, hier wird zuerst der Eltern Konstruktor aufgerufen und dann eine Verbindung mit der Datenbank aufgebaut.
         *  Etwaige fehler werden in der Log Datei festgehalten.
         *  Bei gelingen wird die Verbindungskennung in der Variablen $connection gespeichert
         *
		 * @param Object $config Muss ein gültiges Config Objekt sein
        */
        function __construct(&$config){
        	parent::__construct($config);     	
            $this->connection = mysql_connect($this->oConfig->getValue('dbServer'), $this->oConfig->getValue('dbUser'), $this->oConfig->getValue('dbPass'));
            if (!$this->connection || !mysql_select_db($config->getValue('dbName'))) {
                $this->track("Verbindung gescheitert. Grund: ".mysql_errno()." ".mysql_error());
            }
        }


        
        /**
         *  Mit einer anderen Datenbank auf dem selben Server verbinden....
         *
         *  @param string Datenbankname
         *  @return bool false bei Misserfolg
         */
        function selectDatabase($dbName){
            if($this->connection){
                mysql_select_db($dbName,$this->connection);
            }else{
                $this->dbError=mysql_error();
                return false;
            }
        }

        /**
         *  Wrapper Funktion um Zeichenketten für SQL Abfragen vor zu bereiten
         *
         *  @param string data Zu bearbeitende Zeichenkette
         */
        function dbEscapeString($data){              	
            if($this->connection){
                return mysql_real_escape_string($data);
            }else{
            	print_r("fehler:.....test test.....");
                return false;
            }
        }

        /**
         * Wrapper Funktion um mysql Querys durch zu führen.
         * Die Anzahl der gefundenen Treffer wird automatisch in $this->numRows() gespeichert
         *
         * @param string $query SQL Abfrage
         */
        function executeQuery($query){
          if(empty($query))return;
          $this->numRows = "";
            if($this->connection){
            	if(substr(ltrim(strtoupper($query)), 0, 6)=="SELECT"){
            	  $this->query = $query;            		            			                             
	                If($this->result=mysql_query($query)){   
	                 $this->numRows=mysql_num_rows($this->result);
                  }
            	}else{
            		$this->track("executeQuery() Darf nur für Select Abfragen verwendet werden!");
            	}
            }else{
                $this->dbError=mysql_error();
                $this->track("Datenbankabfrage gescheitert! Grund: ".mysql_errno()." ".mysql_error());
            }
        }

        /**
         * Wapper Funktion um SQL Update Querys durchzuführen
         *
         * @param string $query SQL Abfrage
         */
        function executeUpdate($query){
            if($this->connection){
                 $this->result=mysql_query($query);               
                 $this->affectedRows($this->result);
                 return TRUE;
            }else{
                $this->dbError=mysql_error();
                $this->track("Datenbank Update gescheitert! Grund: ".mysql_errno()." ".mysql_error());
                return false;
            }
        }

        /**
         *  Funktion für die Ausgabe von mySql Fehlern.
         *
         *  @return string Datenbankfehler Beschreibung
         *  @return bool false wenn keine Fehler registriert wurden
         */
        function dbGetError(){
            if($this->dbError!=""){
                return $this->dbError;
            }else{
                return false;
            }
        }

        /**
         * Speichert die Anzahl der gefundenen Treffer in der entsprechenden Variable
         * 
         * @return void
         */
        private function numRows(){
            if($this->result){
                $this->numRows=mysql_num_rows($this->result);
            }
        }

        /**
         * Speichert die Anzahl der bearbeiteten Zeilen in der entsprechenden Variable
         * 
         * @return void
         */
        private function affectedRows(){
            if($this->result){
                $this->numRows=mysql_affected_rows();                                        	
            }
        }

        /**
         * Gibt die Anzahl gefundener Treffer zurück
         *
         * @return int
         */
        function getNumRow(){
            return $this->numRows;
        }

        /**
         * Gibt einen(!) Treffer als Datensatz zurück
         * 
         * @return array
         */
        function getRow(){
            if($this->result){
              return mysql_fetch_assoc($this->result);
            }
        }

        /**
         * Gibt alle gefundenen Datensätze zurück
         * 
         * @return array
         */
        function getRows(){
            $dsatz = array();
            if($this->result){
              while($tmp=mysql_fetch_assoc($this->result)){
                      $dsatz[]=$tmp;
              }              
                return $dsatz;                              
            }
        }

        /**
         * Gibt die zuletzt eingefügten Wert eines AUTO_INCREMENT Feldes zurück
         * 
         * @return long/int
         */
        function getLastInsertId(){
    			$query="SELECT LAST_INSERT_ID() as ins";
    			$this->result = mysql_query($query);
    			$iIns = $this->getRow();
    			return $iIns['ins'];
        }

        
        /**
         * Ungepufferte ausführung einer SQL Abfrage
         * 
         * @param $query
         */
        function executeUnbufferedQuery($query){
        	 if($this->connection){
            	    $this->result=mysql_unbuffered_query($query);                
	                $this->numRows=mysql_num_rows($this->result);
            }else{
        		$this->track("Datenbankabfrage gescheitert! Grund: ".mysql_errno()." ".mysql_error());
        	}
        }
		
		function returnResult(){
			return $this->result;
		}

    }// Ende Klasse

?>
